package singleton;

public class LazyInitHolderSingleton {

    private LazyInitHolderSingleton() {
    }

    /**
     * 静态内部类的优点：外部类加载时并不需要立即加载内部类，内部类不被加载则不去初始化INSTANCE，故而不占内存。
     * 这意味着即使使用class.forName加载LazyInitHolderSingleton，也不会加载SingletonHolder。
     * 而当第一次调用LazyInitHolderSingleton.getInstance()时，才会加载SingletonHolder并初始化INSTANCE。
     * 这样的特性延迟了单例的实例化。
     * 而又因为INSTANCE为常量，所以在这种情况下获取单例是线程安全的。
     */
    private static class SingletonHolder {
        private static final LazyInitHolderSingleton INSTANCE = new LazyInitHolderSingleton();
    }

    public static LazyInitHolderSingleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
